function cineq = power_rate_constraint(X, U, e, data, P_load)
% =========================================================================
% power_rate_constraint.m - (新增文件) NMPC的自定义不等式约束函数
%
% 功能:
%   限制燃料电池功率的变化速率（爬坡率）。
% =========================================================================

    % 从外部工作区加载模型参数
    persistent FCParams SimParams
    if isempty(FCParams)
        FCParams   = evalin('base', 'FCParams');
        SimParams  = evalin('base', 'SimParams');
    end

    dt = SimParams.Ts;
    p = data.PredictionHorizon;
    
    % 爬坡率上限 (W/s) - 你可以根据需要调整这个值
    max_rate = 100; % 例如，限制为100W/s
    
    % 不等式约束需要是一个列向量，cineq <= 0
    cineq = zeros(p, 1);
    
    for k = 1:p
        % X(k,:)   是 x(k|k-1)，即上一步预测的当前状态
        % X(k+1,:) 是 x(k+1|k)，即这一步预测的下一状态
        P_fc_k   = X(k, 4);
        P_fc_kp1 = X(k+1, 4);
        
        % 计算功率变化率
        power_rate = (P_fc_kp1 - P_fc_k) / dt;
        
        % 约束形式为 g(x,u) <= 0
        % 我们希望 |power_rate| <= max_rate
        % 这等价于两个不等式：
        % 1. power_rate - max_rate <= 0
        % 2. -power_rate - max_rate <= 0
        % 为了简化，我们只约束一个方向，或者用绝对值
        cineq(k) = abs(power_rate) - max_rate;
    end
end
